#include <iostream>
using namespace std;
// int main()
// {
//     int i=0;
//     for(i=0;i<10;i++)
//     {
//         cout<<"i="<<i<<endl;
//     }
//     return 0;

// }
// int main()
// {
//     int i=0;
//     cout <<"请输入一个数字" << endl;
//     cin>>i;
//     cout <<"Hello zjh "<< i+1 <<endl;
//     return 0;

// }
// #include <stdio.h>
// #include <raylib.h>
// struct Resouce
// {
//     Texture2D tex_land;
//     Texture2D tex_tress[10];
//     Texture2D tex_socks;
//     Texture2D tex_snow;

// }res;

// void loadRes()
// {
//     //加载图片
//     res.tex_land=LoadTexture("Resource/land.png");

//     char buf[128];
//     for(int i=0;i<10;i++)
//     {
//         sprintf(buf,"Resource/mtree/0000%d.png",i);
//         res.tex_tress[i]=LoadTexture(buf);

//     }
//     res.tex_socks=LoadTexture("Resource/socks.png");
//     res.tex_snow=LoadTexture("Resource/snow.png");
// }
// void drawTex(Texture2D tex,int x,int y,int w,int h)
// {
//     DrawTexturePro(tex,(Rectangle){0,0,tex.width,tex.height},(Rectangle){x,y,w,h},Vector2{0},0,WHITE);
// }
// int index=0;
// //雪花
// typedef struct Snow
// {
//     int startTime;
//     int index;
//     float x;
//     float y;
// }Snow;
// Snow s[1000];
// void snows_init(Snow* snows,size_t size)
// {
//     for(int i=0;i<size;i++)
//     {
//         snows[i].startTime=GetTime()*1000;
//         snows[i].index=GetRandomValue(0,10);
//         snows[i].x=GetRandomValue(0,GetRenderWidth());
//         snows[i].y=GetRandomValue(0,GetRenderHeight());
//     }
// }
// void snows_draw(Snow* snows,size_t size)
// {
//     for(int i=0;i<size;i++)
//     {
//         drawTexPro(res.tex_snow,snows[i].x)
//     }
// }
// int main()
// {
//     // 初始化窗口
//     InitWindow(1024, 768, "圣诞树特效");

//     // 设置目标 FPS
//     SetTargetFPS(60);
//     LoadRes();
//     Snows_init(snows,200);

//     // 主循环
//     while (!WindowShouldClose())
//     {
//         // 开始绘制
//         BeginDrawing();

//         // 清除背景颜色
//         ClearBackground(BLACK);

//         // 在屏幕中心绘制文本
//         draw();
//         // 结束绘制
//         EndDrawing();
//     }

//     // 关闭窗口
//     CloseWindow();

//     return 0;
// }

// #include <stdio.h>
// #include <time.h>
// void my_fun(int n)
// {
//     int i=0;
//     for(i=0;i<n;i++)
//     {
//         printf("%d ",i);
//     }
// }
// void my_fun2(int n)
// {
//    if(n>0)
//    my_fun2(n-1);
//    printf("%d ",n);
// }
// int main()
// {   
//     double duration=0.0;
//     int n=0;
//     printf("请输入一个数\n");
//     scanf("%d",&n);
//     //开始计时
//     int start=clock();
//     my_fun(n);
//     //结束计时
//     int end =clock();
//     printf("\n");                          //fun1 == 0.45
//     duration=(double)(end-start)/CLK_TCK; // fun2 ==0.47 
//     printf("%lf\n",duration);
//     return 0;
// }
// int * fun()
// {
//     int*p= new(10);
//     return p;

// }
// void game()
// {
//     // WASD移动操作
// }
// #include <raylib.h>
// int main()
// {
//     InitWindow(800,600,"ABCDEFG");
//     SetTargetFPS(60);
//     while(!WindowShouldClose())
//     {
//         //开始画制
//         BeginDrawing();
//         //清空屏幕
//         ClearBackground(BLUE);
//         //绘制图形
//         DrawCircle(400,300,50.0,BLACK);
//         //结束画制
//         EndDrawing();
//         //游戏操作
//         game();
//     }
//     CloseWindow();
//     return 0;
// }
// int pivotInteger(int n) {
//     //双指针
//     int i=0;
//     int j=n;
//     //准备一个数组 存储1->n的数字
//     int arr[n];
//     for(i=0;i<n;i++)
//     {
//         arr[i]=i+1;
//     }
//     //置零
//     i=0;
//     int sum_1=0;
//     int sum_2=0;
//     for(j=n-2;j>1;j--)
//     {
//         //sum_1 存储从1-j 的和
//         for(i=1;i<=j;i++)
//         {
//             sum_1+=i;
//         }
//         //sum_2 存储 j-n 的和
//         int mid=j;
//         for(mid=j;mid<=n;mid++)
//         {
//             sum_2+=mid;
//         }
//         if(sum_1==sum_2)
//         {
//             return j;
//         }
//         else
//         {

//             sum_1=0;
//             sum_2=0;
//         }
//     }
//     if(n==1)
//     return 1;
//     else
//     return -1;
// }
// int main ()
// {
//     int n=49;
//     int ret=pivotInteger(n);
//     printf("%d\n",ret);
//     return 0;
// }
// #include <stdio.h>
// int main()
// {
//     int nums[]={1,1,1,1};
//     int numsSize=sizeof(nums)/sizeof(nums[0]);
//     int count=0;
//     int begin=0;
//     int end=numsSize-1;
//     for(begin=0;begin<end;begin++)
//     {
//         for(end=numsSize-1;end>begin;end--)
//         {
//             if(nums[end]==nums[begin])
//             {
//                 count++;
//             }
//         }
//         end=numsSize-1;
//     }
//     printf("%d\n",count);
//     return 0;
// }
#include <stdio.h>
// 几张卡牌 排成一行，每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。

// 每次行动，你可以从行的开头或者末尾拿一张卡牌，最终你必须正好拿 k 张卡牌。

// 你的点数就是你拿到手中的所有卡牌的点数之和。

// 给你一个整数数组 cardPoints 和整数 k，请你返回可以获得的最大点数。
int maxScore(int* cardPoints, int cardPointsSize, int k) 
{
   int sum_l=cardPoints[0];//记录从左侧开始的加和
   int sum_r=cardPoints[cardPointsSize-1];//记录从右侧开始的加和
   int count=0;
   int l=1;
   //左侧情况
   int end=cardPoints[cardPointsSize-1];
   while(count<k-1)
   {
    
    // 11,49,100,20,86,29,72
    //
    if(cardPoints[l]>cardPoints[end])
    {
        sum_l+=cardPoints[l];
        l++;
    }
    else if(cardPoints[l]<cardPoints[end])
    {
        sum_l+=cardPoints[end];
        end--;
    }
    else
    {
        //相等情况
        sum_l+=cardPoints[l];
        l++;
    }
    count++;
   }
   //出来下一情况置零
   count=0;
   int begin=0;
   int r=cardPointsSize-2;
   while(count<k-1)
   {
    if(cardPoints[begin]>cardPoints[r])
    {
        sum_r+=cardPoints[begin];
        begin++;
    }
    else if(cardPoints[begin]<cardPoints[r])
    {
        sum_r+=cardPoints[r];
        r--;
    }
    else
    {
        sum_r+=cardPoints[begin];
        begin++;
    }
    count++;
   }
   //比较两次情况的大小 返回
   return sum_l>sum_r ? sum_l:sum_r; 

}

int main()
{
    int cardPoints[]={11,49,100,20,86,29,72}; //202 1,200,1
    int k = 4;
    int cardPointsSize=sizeof(cardPoints)/sizeof(cardPoints[0]);
    int ret=maxScore(cardPoints,cardPointsSize,k);
    printf("%d\n",ret);
    return 0;
}